﻿#pragma once

#include <SFML/Network.hpp>
#include "../../../domain/models/Card.h"
#include "../../../domain/models/CardsCollection.h"

namespace Views {
	namespace Models {
		namespace Network {
			/**
			* Pomocnicza klasa do serializacji i deserializacji pojedynczych kart
			*/
			class CardViewModel
			{
			public:
				/**
				* Wszystkie karty które mogą zostać wczytane z pakietu
				* (zazwyczaj wszystkie występujące w grze)
				*/
				Cards::CardsCollection cards;
				Cards::Card* card; /**< Karta do zapisania lub odczytana z pakietu */

				/**
				* @param cards Możliwe karty do odczytania
				*/
				CardViewModel(Cards::CardsCollection cards);
				/**
				* @param card Karta do zapisania
				*/
				CardViewModel(Cards::Card* card);

				/**
				* Zapisuje kartę do pakietu
				* @param Packet Pakiet, do którego zapisywana jest karta
				* @param model Obiekt zawierający kartę do zapisania w atrybucie card
				*/
				friend sf::Packet& operator <<(sf::Packet& Packet, const CardViewModel& model);
				/**
				* Wczytuje zserializowane dane z packet i przeszukuje model.cards
				* w poszukiwaniu odpowiadającej karty. Jeśli ją znajdzie zapisuje ją w model.card
				* @param Packet Pakiet, z którego odczytywane są karty
				* @param model Obiekt zawierający możliwe karty do wczytania w atrybucie cards
				*/
				friend sf::Packet& operator >>(sf::Packet& Packet, CardViewModel& model);
			};
		}
	}
}

